//
//  STHomeViewController.swift
//  STVVeibo
//
//  Created by leergou on 16/7/19.
//  Copyright © 2016年 WhiteHouse. All rights reserved.
//

import UIKit

private let homeCellID = "homeCellID"

class STHomeViewController: STVisitorViewController {
    
    // 全局的模型属性
    lazy var statusListViewModel: STStatusListViewModel = STStatusListViewModel()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        if !isLogin {
            visitorView?.setupVisitorView(nil, imgName: nil)
            return
        }
        setupUI()
        getHomeData()
        setupTableViewInfo()
    }
    
    func setupUI(){
        // 导航栏后面的就都看不到了,不会有高斯模糊效果 --> 可以盖住 下拉提醒label的模糊效果
        // 不用老是的 隐藏 和 显示功能
        // 但是用高斯模糊要领向办法解决 连续下拉导致的 提醒 label 被拉到下面的 bug
        self.navigationController?.navigationBar.translucent = false
        // 设置下拉提醒 label
        navigationController!.view.insertSubview(pulldownTipLabel, belowSubview: navigationController!.navigationBar)
    }
    
    func setupTableViewInfo(){
        tableView.separatorStyle = UITableViewCellSeparatorStyle.None
        tableView.dataSource = self
        tableView.delegate = self
        tableView.estimatedRowHeight = 200
        tableView.rowHeight = UITableViewAutomaticDimension
        // 注册 cell
        tableView.registerClass(STHomeStatusCell.self, forCellReuseIdentifier: homeCellID)
        // 设置 footerView 
        tableView.tableFooterView = indicatorView
        // 添加刷新控件
        tableView.addSubview(refreshControl)
        // 这里控制下拉刷新
        // 添加事件
        refreshControl.addTarget(self, action: "refreshAction", forControlEvents: UIControlEvents.ValueChanged)
    }
    
    //  下拉 KVO 监听方法
    func refreshAction(){
        getHomeData()
    }
    
    //MAKR: lazy
    // 菊花
    private lazy var indicatorView: UIActivityIndicatorView = {
        let view = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        
        // 菊花颜色
        view.color = ThemeColor
        return view
    }()
    
    // 系统下载刷新
    private lazy var refreshControl: SHRefreshControl = SHRefreshControl()
    // 请求微博数据提示
    private lazy var pulldownTipLabel: UILabel = {
       let lab = UILabel(font: 12, textColor: UIColor.whiteColor())
        lab.frame = CGRect(x: 0, y: 64 - 30, width: SCREENW, height: 30)
        lab.textAlignment = .Center
        lab.backgroundColor = ThemeColor
        lab.hidden = true
        return lab
    }()
}

extension STHomeViewController:UITableViewDataSource,UITableViewDelegate{
    
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        return statusListViewModel.statusList.count
    }
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier(homeCellID, forIndexPath: indexPath) as! STHomeStatusCell
        
        cell.statusViewModel = statusListViewModel.statusList[indexPath.row]
        
        return cell
    }
    
    func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        // 判断如果显示的是最后一个 cell,叫菊花转,而且当前没有菊花转
//        print("-->\(indexPath.row)")
        // 这边控制的上拉加载更多
        if indexPath.row  == statusListViewModel.statusList.count - 1 && !indicatorView.isAnimating(){
            // 开始动画
            indicatorView.startAnimating()
            getHomeData()
        }
    }
}

// 请求微博首页数据
extension STHomeViewController{
    
    func getHomeData(){
        
        statusListViewModel.loadHomeData (indicatorView.isAnimating()) {(isSuccess, count) -> () in
            // 停止动画
            self.endRefreshing()
            if !isSuccess {
                print("请求数据失败")
                return
            }
            // 刷新数据
            self.tableView.reloadData()
            // 若为下拉刷新,继续加载一个 下拉刷新 的提醒 label
            self.startPullDownTipAnimation(count)
        }
    }
    
    // 设置微博下来刷新提醒动画
    func startPullDownTipAnimation(count: Int){
        // 解决连续下拉 导致的 label 被拉到下面的 bug
        if pulldownTipLabel.hidden == false {
            return
        }
        // 显示提醒 label
        pulldownTipLabel.hidden = false
        var name = ""
        if count == 0{
            name = "已经是最新"
        } else {
            name = "已为您更新了\(count)条微博"
        }
        // 赋值
        pulldownTipLabel.text = name
        
        // 设置下拉刷新提醒动画
        UIView.animateWithDuration(1, animations: { () -> Void in
            
            self.pulldownTipLabel.transform = CGAffineTransformMakeTranslation(0, 30)
            }) { (_) -> Void in
                
                UIView.animateWithDuration(0.5, delay: 1, options: [], animations: { () -> Void in
                    self.pulldownTipLabel.transform = CGAffineTransformIdentity
                    
                    }, completion: { (_) -> Void in
                        // 隐藏提醒 label
                        self.pulldownTipLabel.hidden = true
                })
        }
    }
    
    // 停止动画
    // 停止各种动画
    func endRefreshing(){
        self.indicatorView.stopAnimating()
        self.refreshControl.endRefreshing()
    }
}
